
package la.foton.atividade.controller;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import la.foton.atividade.entity.Custo;
import la.foton.atividade.entity.Projeto;
import la.foton.atividade.service.CustoService;
import la.foton.atividade.service.ProjetoService;
import org.primefaces.event.RowEditEvent;

@ManagedBean(name = "custoBean")
@RequestScoped
public class CustoBean extends BaseBean
{

   /**
	 * 
	 */
   private static final long serialVersionUID = 1L;
   @ManagedProperty("#{custoService}")
   private CustoService custoService;

   @ManagedProperty("#{projetoService}")
   private ProjetoService projetoService;

   private Custo custo;

   private String nomeCusto;
   private List<Projeto> projetoList;
   private List<Custo> custoList;

   private List<String> idProjetoSelecionados;

   public CustoBean()
   {

   }

   public void atualizaListaProjetos()
   {
      setProjetoList(projetoService.getAll());
   }

   public void atualizaListaCustos()
   {
      setCustoList(custoService.getAll());
   }

   /**
    * Inclui um novo custo no banco de dados, associando aos projetos selecionados
    */
   public void incluir()
   {
      custo = new Custo();
      custo.setNome(nomeCusto);

      for (Projeto projeto : getProjetosSelecionados())
      {
         custo.addProjeto(projeto);
      }
      custoService.create(custo);
      clean();
      addInfoMessage("Centro de Custo criado com sucesso.");
   }

   /**
    * Recupera a lista de id's de projetos selecionados no combobox e transforma em objetos Projeto
    * 
    * @return List<Projeto>
    */
   private List<Projeto> getProjetosSelecionados()
   {
      List<Projeto> projetosSelecionadosList = new ArrayList<Projeto>();

      for (String idProjeto : getIdProjetoSelecionados())
      {
         // Projeto projeto = new Projeto(Integer.valueOf(idProjeto));
         // projetosSelecionadosList.add(projeto);

      }

      return projetosSelecionadosList;

   }

   /**
    * Limpa as variáveis do formulário
    */
   public void clean()
   {
      this.nomeCusto = "";
   }

   /**
    * Método utilizado para editar os centros de custos.
    * 
    * @param event
    */
   public void onEdit(RowEditEvent event)
   {
      Custo custo = (Custo) event.getObject();
      Projeto prt = custo.getProjetoListFace().get(1);
      custoService.update(custo);
      atualizaListaCustos();
      addInfoMessage("Centro de Custo" + " editado");
   }

   public void onCancel(RowEditEvent event)
   {

      addInfoMessage(" excluido");
   }

   // /**
   // * Monta uma collection com SelectItens para a combobox de projetos.
   // *
   // * @return Collection<SelectItem>
   // */
   // public Collection<SelectItem> getValuesComboBoxProjeto()
   // {
   // Collection<SelectItem> toReturn = new ArrayList<SelectItem>();
   //
   // for (Projeto projeto : getProjetoList())
   // {
   // toReturn.add(new SelectItem(projeto.getId(), projeto.getNome()));
   // }
   //
   // return toReturn;
   // }

   /**
    * Monta uma collection com SelectItens para a combobox de projetos.
    * 
    * @return Collection<SelectItem>
    */
   public Collection<Projeto> getValuesComboBoxProjeto()
   {
      return getProjetoList();
   }


   /**
    * Recupera todos os centros de custos cadastrados no banco de dados
    * 
    * @return
    */
   public List<Custo> getAllCustos()
   {
      if (custoList == null)
      {
         atualizaListaCustos();
      }
      return custoList;
   }

   /** METODOS GETTERS E SETTERS */

   public List<String> getIdProjetoSelecionados()
   {
      if (idProjetoSelecionados == null)
      {
         idProjetoSelecionados = new ArrayList<String>();
      }
      idProjetoSelecionados.add("1");
      return idProjetoSelecionados;
   }

   public void setIdProjetoSelecionados(List<String> idProjetoSelecionados)
   {
      this.idProjetoSelecionados = idProjetoSelecionados;
   }

   public CustoService getCustoService()
   {
      return custoService;
   }

   public void setCustoService(CustoService custoService)
   {
      this.custoService = custoService;
   }

   public Custo getCusto()
   {
      return custo;
   }

   public void setCusto(Custo custo)
   {
      this.custo = custo;
   }

   public String getNomeCusto()
   {
      return nomeCusto;
   }

   public void setNomeCusto(String nomeCusto)
   {
      this.nomeCusto = nomeCusto;
   }

   public List<Projeto> getProjetoList()
   {
      if (this.projetoList == null)
      {
         atualizaListaProjetos();
      }
      return projetoList;
   }

   public void setProjetoList(List<Projeto> projetoList)
   {
      this.projetoList = projetoList;
   }

   public ProjetoService getProjetoService()
   {
      return projetoService;
   }

   public void setProjetoService(ProjetoService projetoService)
   {
      this.projetoService = projetoService;
   }

   public List<Custo> getCustoList()
   {
      return custoList;
   }

   public void setCustoList(List<Custo> custoList)
   {
      this.custoList = custoList;
   }

}
